// // stores/websocket.js
// import { defineStore } from 'pinia';
//
// export const useWebSocketStore = defineStore('websocket', {
//     // 启用持久化
//     persist: {
//         paths: ['username'], // 持久化用户名
//     },
//     state: () => ({
//         websocket: null, // 存储 WebSocket 实例
//         isConnected: false, // 连接状态标记
//         reconnectAttempts: 0, // 重连尝试次数
//         maxReconnectAttempts: 5, // 最大重连次数
//         username: null, // 新增字段：存储当前连接的用户名
//         reconnectTimer: null
//     }),
//     actions: {
//         // 初始化 WebSocket 连接
//         initWebSocket() {
//             const user = JSON.parse(localStorage.getItem('localStorageUser'));
//             if (!user?.name) {
//                 console.error('无法获取用户名，请重新登录');
//                 return;
//             }
//             this.username = user.name;
//
//
//             if (this.websocket) {
//                 console.log('WebSocket 已存在，避免重复连接');
//                 return;
//             }
//
//             // 创建 WebSocket 实例
//             this.websocket = new WebSocket(`ws://localhost:9090/ws/${this.username}`);
//
//             // 绑定事件处理器
//             this.websocket.onopen = () => {
//                 this.isConnected = true;
//                 this.reconnectAttempts = 0; // 重置重连计数器
//                 this.websocket.send("这是来自客户端的消息" + new Date());
//                 console.log(`用户 ${this.username} 连接成功...`);
//                 this.startHeartbeat(); // 开启心跳
//             };
//
//             this.websocket.onmessage = (event) => {
//                 console.log('收到消息:', event.data);
//                 // 处理业务消息...
//             };
//
//             this.websocket.onerror = (error) => {
//                 console.error('WebSocket 错误:', error);
//                 this.scheduleReconnect(); // 错误时尝试重连
//             };
//
//             // 监听关闭事件
//             this.websocket.onclose = (event) => {
//                 this.handleClose(event);
//             };
//         },
//
//         // 智能重连策略（核心优化点）
//         scheduleReconnect() {
//             if (this.reconnectAttempts >= this.maxReconnectAttempts) {
//                 console.log('已达最大重连次数，停止重连');
//                 return;
//             }
//
//             // 清除旧定时器避免重复
//             if (this.reconnectTimer) clearTimeout(this.reconnectTimer);
//
//             // 指数退避算法
//             const delay = Math.min(30000, 1000 * Math.pow(2, this.reconnectAttempts));
//             this.reconnectTimer = setTimeout(() => {
//                 this.reconnectAttempts++;
//                 console.log(`尝试第 ${this.reconnectAttempts} 次重连...`);
//                 this.initWebSocket(); // 自动重连
//             }, delay);
//         },
//
//         // 统一处理连接关闭
//         handleClose(event) {
//             this.isConnected = false;
//             if (!event.wasClean) {
//                 this.scheduleReconnect();
//             }
//         },
//
//         // 心跳机制（保持连接活跃）
//         startHeartbeat() {
//             this.heartbeatTimer = setInterval(() => {
//                 if (this.isConnected) {
//                     this.sendMessage({ type: 'heartbeat', data: 'ping' });
//                 }
//             }, 30000); // 每 30 秒一次
//         },
//
//         // 发送消息
//         sendMessage(message) {
//             if (this.isConnected) {
//                 this.websocket.send(JSON.stringify(message));
//             }
//         },
//
//         // 重连机制
//         reconnect(username) {
//             clearInterval(this.heartbeatTimer);
//             setTimeout(() => {
//                 console.log('尝试重新连接...');
//                 this.closeWebSocket(); // 清理旧连接
//                 this.initWebSocket(username); // 重新初始化
//             }, 5000); // 5 秒后重试
//         },
//
//         // 关闭连接
//         closeWebSocket() {
//             if (this.websocket) {
//                 this.websocket.close();
//                 this.websocket = null;
//                 this.isConnected = false;
//                 clearInterval(this.heartbeatTimer);
//             }
//         }
//     }
// });